/*****************************************************************************/
/*                                                                           */
/*    Domino Operation System Driver Module                                  */
/*                                                                           */
/*    Copyright (C) 2005 Laszlo Arvai                                        */
/*                                                                           */
/*    ------------------------------------------------------------------     */
/*    drvSystemTimer.c - System Timer (1ms)  Driver                          */
/*****************************************************************************/

///////////////////////////////////////////////////////////////////////////////
// Includes
#include <avr/io.h>
#include <avr/interrupt.h>
#include "krnlTypes.h"

///////////////////////////////////////////////////////////////////////////////
// Module local variables
static dosWord l_system_time = 0;

///////////////////////////////////////////////////////////////////////////////
// Initialize system timer
void krnlInitSystemTimer(void)
{
	// Init timer3
	TCCR3B = _BV(CS31) | _BV(CS30);
	ETIMSK = _BV(TOIE3);
}

///////////////////////////////////////////////////////////////////////////////
// Interrupt handler
SIGNAL(SIG_OVERFLOW3)
{
	// set 1ms period
	TCNT3 = 65536 - 250;

	// start A/D
	ADCSRA |= _BV(ADSC);

	l_system_time++;
}

///////////////////////////////////////////////////////////////////////////////
// Get system timer
dosWord krnlGetSystemTimer(void)
{
	return l_system_time;
}
